package com.wwu.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.wwu.common.JaxbUtil;
import com.wwu.common.WsConst;
import com.wwu.entity.inpat.Patient;
import com.wwu.entity.inpat.PatientData;
import com.wwu.mapper.inpat.PatientMapper;
import com.wwu.service.IEmrInpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.jws.WebService;
import java.util.List;

/**
 * 电子病历系统住院医疗业务服务实现类
 * @Author: 一蓑烟雨
 * @CreateTime: 2022-03-16 11:52
 * @Version: 1.0.0
 **/
@Slf4j
@WebService(targetNamespace = WsConst.NAMESPACE_URI, endpointInterface = WsConst.ENDPOINT_IINTERFACE+"IEmrInpService")
@Component
public class EmrInpServiceImpl implements IEmrInpService {

    @Resource
    private PatientMapper patientMapper;

    /**
     * 获取住院患者基本信息
     * @param pid	病人ID
     * @param patientName 病人姓名
     * @param certNo 身份证号
     * @param responseType 响应返回类型(json或xml，默认返回json)
     * @return: java.lang.String
     * @Author: 一蓑烟雨
     * @Date: 2022/3/16 0016 下午 12:15
     */
    @Override
    public String getPatientInfo(String pid, String patientName, String certNo, String responseType) {
        //将参数设置到对象中
        Patient pat = new Patient();
        pat.setPid(pid);
        pat.setPatientName(patientName);
        pat.setCertNo(certNo);

        PatientData patd = new PatientData();
        try {
            if(!StringUtils.hasText(pid) && !StringUtils.hasText(patientName) && StringUtils.hasText(certNo)){
                patd.setCode(2);
                patd.setMsg("pid、patientName和certNo参数不能全部为空！");
            }else{
                List<Patient> patdlist = patientMapper.getPatientInfo(pat);
                patd.setCode(1);
                patd.setMsg("住院患者基本信息获取成功");
                patd.setPatientInfo(patdlist);
            }
        } catch (Exception e) {
            log.error("------->住院患者基本信息获取失败",e);
            patd.setCode(2);
            patd.setMsg("住院患者基本信息获取失败");
        }

        String retStr = null;
        //数据进行转换返回到客户端
        if(WsConst.RESPONSE_XML.equals(responseType)){
            retStr = JaxbUtil.convertToXmlHeader(patd);
        }else{
            retStr = JSONObject.toJSONString(patd, SerializerFeature.WriteNullStringAsEmpty);
        }
        log.info("------->住院患者基本信息获取成功,返回信息为：{}",retStr);
        return retStr;
    }
}
